package ArrayList;

import java.util.ArrayList;
import java.util.Arrays;

public class MyArrayList implements IList {
    protected  int usesize;
    protected int[] array;

    public MyArrayList(){
        this.array = new int[10];
    }


    // 新增元素,默认在数组最后新增
    @Override
    public void add(int data) {
        if(isfull()){
            array = Arrays.copyOf(array,2*array.length);
        }
        this.array[usesize] = data;
        this.usesize++;
//        int[] newarray = expand(array, array.length);
//        newarray[usesize] = data;
//        usesize++;
    }

//    public Boolean isFull(int size){
//        if(size == usesize){
//            return false;
//        }
//        return true;
//    }
    public boolean isfull(){
        return usesize == array.length;
    }


//    public int[] expand(int[] array,int length){
//        int[] newarray = new int[2*length];
//        return newarray;
//    }



    // 在 pos 位置新增元素
    @Override
    public void add(int pos, int data) {
        //检查pos 位置是否合法
        //方法 1
//        if(pos < 0 || pos > usesize){
//            return;
//        }
        //方法 2
        //使用异常解决
        try {
            checkPos(pos);
        } catch (posNotlegalException e){
            e.printStackTrace();
        }

        if(isfull()){
            array = Arrays.copyOf(array,2*array.length);
            }

        for (int i = usesize-1; i >= pos; i--) {
            array[i + 1] = array[i];
        }
            array[pos] = data;
            usesize++;


    }

    public void checkPos(int pos) throws posNotlegalException{
        if(pos < 0 || pos > usesize){
            throw new posNotlegalException("pos位置不合法");
        }
    }


    // 判定是否包含某个元素
    @Override
    public boolean contains(int toFind) {
        for(int i = 0; i < usesize; i++){
            if(array[i] == toFind){
                return true;
            }
        }
        return false;
    }

    // 查找某个元素对应的位置
    @Override
    public int indexOf(int toFind) {
        for(int i = 0; i < usesize; i++){
            if(array[i] == toFind){
                return i;
            }
        }
        return -1;
    }

    // 获取 pos 位置的元素
    @Override
    public int get(int pos) {
       if(pos < 0 || pos >= usesize){
           return -1;
       } else {
           return array[pos];
       }
    }

    // 给 pos 位置的元素设为 value
    @Override
    public void set(int pos, int value) {
        if(pos < 0 || pos >= usesize){
            return;
        }

        array[pos] = value;
    }

    public void set2(int pos, int value) {
        try {
            checkPosofSetandGet(pos);
        } catch (posNotlegalException e){
            e.printStackTrace();
        }

        array[pos] = value;
    }

    public void checkPosofSetandGet(int pos) throws posNotlegalException{
        if(pos < 0 || pos >= usesize){
            throw new posNotlegalException("pos位置不合法");
        }
    }

    //删除第一次出现的关键字key
    @Override
    public void remove(int key) {
        for (int i = 0; i < usesize; i++) {
            if(array[i] == key){
                int pos = i;
                for(int j = pos;j < usesize - 1; j++ ){
                    array[j] = array[j+1];
                }
                usesize--;
            }
            return;
        }
    }

    public void remove2(int key) {
                int pos = indexOf(key);
                if(pos == -1){
                    System.out.println("没有要删除的数字");
                    return;
                }

                for(int j = pos;j < usesize - 1; j++ ){
                    array[j] = array[j+1];
                }

                usesize--;
            }

    // 获取顺序表长度
    @Override
    public int size() {
        return array.length;
    }

    // 清空顺序表
    @Override
    public void clear() {
        usesize = 0;
    }

    //打印
    public void print(){
        for (int i = 0; i < usesize; i++) {
            System.out.println(array[i]);
        }
    }

}
